using System;
using System.Collections.Generic;
using System.Text;

namespace NSimpleDB.Service.Contract
{
    public interface ISimpleDBService : IDisposable
    {
        void Open(string connectionString);
        void Close();

        void CreateDomain(string domainName);
        string[] ListDomains();
        string[] ListDomains(int maxNumberOfDomains, ref string nextToken);
        string[] ListDomains(ref string nextToken);
        void DeleteDomain(string domainName);

        void PutAttributes(string domainName, string itemName, params ISimpleDBAttribute[] attributes);
        ISimpleDBAttribute[] GetAttributes(string domainName, string itemName, params string[] attributeNames);
        void DeleteAttributes(string domainName, string itemName);
        void DeleteAttributes(string domainName, string itemName, params string[] attributeNames);
        void DeleteAttributes(string domainName, string itemName, params ISimpleDBAttribute[] attributes);

        string[] Query(string domainName, string queryExpression);
        string[] Query(string domainName, string queryExpression, ref string nextToken);
        string[] Query(string domainName, string queryExpression, int maxNumberOfItems, ref string nextToken);
        //string[] Query(string domainName, int maxNumberOfItems, ref string nextToken);
        //string[] Query(string domainName, ref string nextToken);
    }
}
